const a = [1, 2, 3, 4, 5, 2, 2, 5, 6, 5];

// 使用new Set 适合一些简单数组
function uniqueArr1() {
  return Array.from(new Set(a));
}

// console.log(uniqueArr1(a));

// 使用indexOf
function uniqueArr2(arr) {
  const result = [];
  for (let i = 0; i < arr.length; i++) {
    if (result.indexOf(arr[i]) === -1) {
      result.push(arr[i]);
    }
  }
  return result;
}
// console.log(uniqueArr2(a));

// 使用filter方法
function uniqueArr3(a = [], b = []) {
  let arr = a.concat(b);
  return arr.filter((item, index) => {
    //   if(arr.indexOf(item) === index)  {
    //    console.log('item',item)
    //   }
    // indexOf返回数组中第一次出现给定元素的下标，如果不存在则返回 -1
    return arr.indexOf(item) === index;
  });
}

// console.log(uniqueArr3(a));

// 使用reduce方法
function uniqueArr4(arr) {
  return arr.reduce((prev, cure) => {
    if (prev.indexOf(cure) === -1) {
      prev.push(cure);
    }
    return prev;
  }, []);
}

const arrObj = [
  { name: '张三', age: '18' },
  { name: '张三', age: '19' },
  { name: '张三', age: '20' },
  { name: '李四', age: '19' },
  { name: '王五', age: '20' },
  { name: '赵六', age: '21' },
];
function uniqueArr5(arr,key) {
   const result = {};
   return arr.reduce((prev,cure)=>{
      const keyVal = cure[key];
      // 检查当前对象中指定属性的值是否已经存在于结果中
      if(!result[keyVal]) {
         result[keyVal] = true;
         prev.push(cure);
      }
      return prev;
   },[])
   
}
console.log(uniqueArr5(arrObj,'name'));
